]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
data: Overhaul systemd units
authorAdrian Vovk <adrianvovk@gmail.com>
Thu, 13 Nov 2025 19:01:20 +0000 (14:01 -0500)
committerAdrian Vovk <adrianvovk@gmail.com>
Tue, 16 Dec 2025 20:38:34 +0000 (15:38 -0500)
This simplifies the structure of the systemd units, since we no longer
support running with X11. But it also allows us to pass in the
gnome-shell session mode via systemd.

This removes the need for GDM to have any special code to handle the
GNOME_SHELL_SESSION_MODE environment variable, and allows GNOME sessions
to specify directly what session mode they need without the involvement
of GDM. This makes it trivial to define custom gnome-session sessions
that use custom gnome-shell session modes.

Sessions that consist entirely of a gnome-shell mode (like the
gnome-classic session) will need to do a little more legwork to define
themselves as proper gnome-session sessions.

data/meson.build
data/org.gnome.Shell.target.in [deleted file]
data/org.gnome.Shell@.service.in [new file with mode: 0644]
data/org.gnome.Shell@wayland.service.in [deleted file]

index 0378910b2fa36bbe6d0cbc3b77451791002ba2f4..bc1c6ab2da1ed2c977e44d6e5cc0727e2fecdbb5 100644 (file)
@@ -114,31 +114,17 @@ install_data('00_org.gnome.shell.gschema.override', install_dir: schemadir)
 if have_systemd
   unitconf = configuration_data()
   unitconf.set('bindir', bindir)
-  supported_sessions = ['wayland']
-
   configure_file(
-    input: 'org.gnome.Shell@wayland.service.in',
-    output: 'org.gnome.Shell@wayland.service',
+    input: 'org.gnome.Shell@.service.in',
+    output: 'org.gnome.Shell@.service',
     configuration: unitconf,
     install_dir: systemduserunitdir
   )
 
-
-  units = files('org.gnome.Shell-disable-extensions.service')
-  targetconf = configuration_data()
-  sessions_wants = []
-  foreach session: supported_sessions
-    sessions_wants += 'org.gnome.Shell@' + session + '.service'
-  endforeach
-  targetconf.set('SUPPORTED_SESSIONS', ' '.join(sessions_wants))
-  target = configure_file(
-    input: 'org.gnome.Shell.target.in',
-    output: 'org.gnome.Shell.target',
-    configuration: targetconf
+  install_data (
+    'org.gnome.Shell-disable-extensions.service',
+    install_dir: systemduserunitdir,
   )
-  units += target
-
-  install_data(units, install_dir: systemduserunitdir)
 endif
 
 # for unit tests - gnome.compile_schemas() only looks in srcdir
diff --git a/data/org.gnome.Shell.target.in b/data/org.gnome.Shell.target.in
deleted file mode 100644 (file)
index bb65fa0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=GNOME Shell
-DefaultDependencies=no
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-Wants=@SUPPORTED_SESSIONS@
\ No newline at end of file
diff --git a/data/org.gnome.Shell@.service.in b/data/org.gnome.Shell@.service.in
new file mode 100644 (file)
index 0000000..d9dd732
--- /dev/null
@@ -0,0 +1,33 @@
+[Unit]
+Description=GNOME Shell
+OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+AssertEnvironment=XDG_SESSION_TYPE=wayland
+
+[Service]
+Slice=session.slice
+Type=notify
+ExecStart=@bindir@/gnome-shell --mode=%i
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+
+# unset some environment variables that were set by the shell and won't work now that the shell is gone
+ExecStopPost=-systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY
+
+# On wayland we cannot restart
+Restart=no
+# Kill any stubborn child processes after this long
+TimeoutStopSec=5
+
+# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early
+OOMScoreAdjust=-1000
diff --git a/data/org.gnome.Shell@wayland.service.in b/data/org.gnome.Shell@wayland.service.in
deleted file mode 100644 (file)
index 813da0b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-[Unit]
-Description=GNOME Shell on Wayland
-# On wayland, force a session shutdown
-OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target
-OnFailureJobMode=replace-irreversibly
-CollectMode=inactive-or-failed
-RefuseManualStart=on
-RefuseManualStop=on
-
-After=gnome-session-manager.target
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-ConditionEnvironment=XDG_SESSION_TYPE=%I
-
-[Service]
-Slice=session.slice
-Type=notify
-ExecStart=@bindir@/gnome-shell
-# Exit code 1 means we are probably *not* dealing with an extension failure
-SuccessExitStatus=1
-
-# unset some environment variables that were set by the shell and won't work now that the shell is gone
-ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY'
-
-# On wayland we cannot restart
-Restart=no
-# Kill any stubborn child processes after this long
-TimeoutStopSec=5
-
-# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early
-OOMScoreAdjust=-1000